反射から計画へ
エージェント設計の進化において、私たちは 反射エージェント(例:「前の車がブレーキをかけたら、ブレーキを開始する」)のような単純なルールに基づいて、知覚を直接行動にマッピングするものから、 問題解決エージェントへ移行します。反射エージェントは即時のコンテキストで動作しますが、問題解決エージェントは 目標ベースです。それらは、特定の目標を満たすシーケンスを見つけるために、行動の将来の結果を考慮します。
- 反射エージェント: $Action = Function(Percept)$
- 計画エージェント: $Action\_Sequence = Search(State, Goal)$
アトミック状態表現
この基本的なレベルでは、エージェントは アトミック表現を使用します。これは、世界の状態がブラックボックス(検索アルゴリズムには内部構造が見えない単一のノード)として扱われることを意味します。エージェントは次についてのみ推論します。
- 状態 ($S$): 環境のスナップショット。
- アクション ($A$): 状態間の遷移。
- 目標テスト: 状態 $s \in S_{goal}$ であるかどうかのブール値チェック。
問題解決ループ
問題解決エージェントは、環境をナビゲートするために、明確な4段階のサイクルに従います。
- 目標の策定: 現在の状況に基づいて追求すべき目標を決定する。
- 問題の策定: 現実世界を数学的モデル(状態とアクション)に抽象化する。
- 探索: 行動シーケンスをシミュレーションして、 最適なパス。
- 実行: 検索フェーズで見つかったアクションを、さらなる検討なしに実行する(静的な環境を想定)。
Python 実装 (agent_types.py)
1
class ReflexAgent:
2
defact( self, percept):
3
# 直接マッピング: ルール → アクション
4
return rules.get(percept, default_action)
5
6
class ProblemSolvingAgent:
7
def__init__( self):
8
self.seq = [] # バッファリングされたアクションシーケンス
9
10
defact( self, percept):
11
# 実行中であれば、続行する
12
ifself.seq:
13
returnself.seq.pop( 0()
14
15
# それ以外の場合は、計画(検索)する
16
state = self。update_state(percept)
17
goal = self。formulate_goal(state)
18
problem = self。formulate_problem(state, goal)
19
20
# 検索はアクションのリストを返す
21
self.seq = search_algorithm(problem)
22
23
returnself.seq.pop( 0()